class Queue {
    constructor() {
        this.count = 0; // 数量
        this.lowestCount = 0; // 标记位置，起始位置
        this.items = {}; // 存放数据
    }
    /**
     * 方法主要是包括：enqueue():向队列尾部添加一个数据
     *              dequeue():移除队列的第一项（排在最前边的数据），并且返回被移除的数据。
     *              peek(): 返回队列中的第一个元素————最先被添加，也是最先被移除的元素。
     *              isEmpty():判断当前队列是不是空的。
     *              size():返回当前队列的尺寸。
     *
     * */

    enqueue(element) {
        this.items[this.count] = element;
        this.count++;
        //  this.lowestCount += 1;
    }

    dequeue() {
        if (this.isEmpty()) {
            return undefined;
        }
        const result = this.items[this.lowestCount];
        delete this.items[this.lowestCount];
        this.lowestCount++;
        return result;
    }

    peek() {
        if (this.isEmpty()) {
            return undefined;
        }
        return this.items[this.lowestCount];
    }

    isEmpty() {
        return this.size() === 0;
    }

    size() {
        return this.count - this.lowestCount;
    }

    clear() {
        this.items = {};
        this.count = 0;
        this.lowestCount = 0;
    }

    toString() {
        if (this.isEmpty()) {
            return "";
        }
        let objString = `${this.items[this.lowestCount]}`;
        for (let i = this.lowestCount + 1; i < this.count; i++) {
            objString = `${objString},${this.items[i]}`;
        }
        return objString;
    }
}